home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tango2.lha / SOURCES / ray30.s < prev    next >
Encoding:
Text File  |  1988-07-19  |  17.2 KB  |  934 lines

  1. ; ****************************************
  2. ; ** INTRO NUMBER 5 (C) 1990 CRYPTIC UK **
  3. ; ** CODED BY: TANGO                    **
  4. ; ** MUSIC BY: COUNT                    **
  5. ; ****************************************
  6.  
  7.     opt c-
  8.     section blitter,code_c            Chip Ram please !!
  9.     include    df1:definitions            Give me some hardware reggies
  10.     include    df1:macros                Give me some macros
  11.     
  12.         
  13. ;LOCAL CONSTANTS
  14.  
  15. icra        equ $bfed01                
  16. ;allocmem     =-30-168                
  17. ;freemem     =-30-180                
  18. fontmemory    =4000
  19. MEMF_CHIP    EQU    1<<1        
  20. MEMF_CLEAR    EQU    1<<16        
  21. MEMORY    EQU    MEMF_CHIP+MEMF_CLEAR    ;allocates chip ram and clears it
  22.  
  23.  
  24.  
  25. TAKEOVER:
  26.     Move.l    #Blank,D1
  27.     Move.w    D1,Blank1l+2
  28.     Move.w    D1,Blank2l+2
  29.     Move.w    D1,Blank3l+2
  30.     Swap    D1
  31.     Move.w    d1,Blank1h+2
  32.     Move.w    d1,Blank2h+2
  33.     Move.w    d1,Blank3h+2
  34.     
  35.     LEA custom,a5        
  36.     LEA GFXLIB(PC),a1             Point to 'graphics.library'
  37.     MOVEQ #0,D0                     Doesn't matter which version
  38.      MOVE.L 4.w,a6                 EXECBASE
  39.     jsr    -132(a6)                 task switching off (forbid)
  40.      JSR -$228(a6)                  Openlibrary
  41.      MOVE.L D0,GFXBASE             Store library address
  42.     jsr    cyb_init
  43.         
  44. ;Now put the graphic addresses in the CopperList         
  45.  
  46.      move.l    screenx,d1            Bitplane memory address
  47.     move.w    d1,bp1lo+2            for scroll 1.
  48.      swap    d1
  49.      move.w    d1,bp1hi+2
  50.  
  51.      move.l    screenx,d1            Bitplane memory address
  52.     ADD.L    #10000,D1
  53.     move.w    d1,bp3lo+2            for scroll 1.
  54.      swap    d1
  55.      move.w    d1,bp3hi+2
  56.  
  57.      move.l    screenx,d1            Bitplane memory address
  58.     ADD.L    #10000*2,D1
  59.     move.w    d1,bp5lo+2            for scroll 1.
  60.      swap    d1
  61.      move.w    d1,bp5hi+2
  62.  
  63.      move.l    screeny,d1            Bitplane memory address
  64.     move.w    d1,abp1lo+2            for scroll 2.
  65.      swap    d1
  66.      move.w    d1,abp1hi+2
  67.  
  68.     move.l    screeny,d1            Bitplane memory address
  69.     ADD.L    #10000,D1
  70.     move.w    d1,abp3lo+2            for scroll 2.
  71.      swap    d1
  72.      move.w    d1,abp3hi+2
  73.  
  74.     move.l    screeny,d1            Bitplane memory address
  75.     ADD.L    #10000*2,D1
  76.     move.w    d1,abp5lo+2            for scroll 2.
  77.      swap    d1
  78.      move.w    d1,abp5hi+2
  79.  
  80.  
  81. ; ** SET UP EVEN BITPLANES 2,4,6 **
  82.  
  83.     MOVE.L    #PLAY2,D1
  84.     MOVE.W    D1,BP2LO+2
  85.     SWAP    D1
  86.     MOVE.W    D1,BP2HI+2
  87.     
  88.     MOVE.L    #PLAY2,D1
  89.     ADD.L    #10240,D1
  90.     MOVE.W    D1,BP4LO+2
  91.     SWAP    D1
  92.     MOVE.W    D1,BP4HI+2
  93.     
  94.     MOVE.L    #PLAY2,D1
  95.     ADD.L    #10240*2,D1
  96.     MOVE.W    D1,BP6LO+2
  97.     SWAP    D1
  98.     MOVE.W    D1,BP6HI+2
  99.     
  100.      move.l GFXBASE,d0            Move gfxbase offset to d0
  101.      MOVE.L D0,A6                
  102.      MOVE.W #$80,dmacon(a5)        Turn off copper whilst changing it
  103.      MOVE.L $32(A6),WBCOPPER         Store old (WBench) copper address
  104.      MOVE.L #OURCOPPER,$32(A6)    Point to new copper list (our own)
  105.      MOVE.W #$8080,dmacon(a5)    Re-enable copper
  106.      MOVE.W #$8010,intena(a5)        
  107.      MOVE.L $6c,old                Save work bench interrupt
  108.      MOVE.L #LEV3,$6c            Point to were to set up interrupt
  109.     move.w    intenar(a5),systemints
  110.     move.b    #%01111111,icra        Kill keyboard.
  111.         
  112. WAIT:     
  113.     BTST #6,$BFE001                This waits for the left
  114.      BNE.S    WAIT                mouse button to be pressed
  115.     move.l    4.w,a6                EXECBASE
  116.      MOVE.L old,$6c                Restore system interrupts
  117.     MOVE.L GFXBASE,A6
  118.      MOVE.W #$80,dmacon(a5)        Disable DMA
  119.      MOVE.L WBCOPPER,$32(A6)        Restore old copperlist
  120.      MOVE.W #$8080,dmacon(a5)    Enable DMA
  121.      move.w    systemints,d0        Systems interrupt
  122.      or.w    #$c000,d0
  123.      move.w    d0,intena(a5)        Enable OS interrupts
  124.      move.b    #%10011011,icra        Enable keyboard
  125.     clr.w    $dff0a8                Clear music
  126.     clr.w    $dff0b8
  127.     clr.w    $dff0c8
  128.     clr.w    $dff0d8
  129.     move.w    #$f,$dff096
  130.     rts
  131.  
  132.  
  133. ERROR:    
  134.     move.l 4.w,a6                Get EXECBASE
  135.     jsr    -138(a6)                Permit ( multi-tasking on )
  136.     moveq    #0,d0                Clear d0
  137.      RTS                            Return to AmigaDOS
  138.  
  139.  
  140. ;This is the NEW level 3 interrupt
  141.  
  142. LEV3:
  143.      Save_all                    Save all registers to the stack
  144.     lea    custom,a5
  145.     AND #$10,intreqr(a5)           Check if interrupt is from Copper 
  146.     BNE out
  147.     move.w    #$8010,$9c            Cause Copper interrupt                                
  148.  
  149. ; ** Main Routines called every VBI **
  150.     bsr    testscroll
  151.     bsr    testscroll2
  152.     bsr    bounce2
  153.     bsr    bounce
  154.     jsr    cyb_music
  155.             
  156. out:     
  157.     Return_all
  158.     DC.W $4ef9                    hex value for  JMP instruction
  159. old:     
  160.     DC.L 0                        will jump to normal interrupt
  161.  
  162.  
  163. ; ** THE SCROLL ROUTINE **
  164.  
  165. testscroll:
  166.     tst.l    stopper
  167.     beq.s    scroll
  168.     sub.l    #1,stopper
  169.     rts
  170. scroll:
  171.     cmp.l    #30,val                    Blitshifted all <<<
  172.     blo.s    coarse_scroll_it        No then get doing it !!
  173.     bsr        blit_char                Blit letter to screen
  174.     clr.l    val                        Reset index
  175. coarse_scroll_it:
  176.     bsr        coarse                    Scroll all line
  177.     rts                            
  178.  
  179. testscroll2:
  180.     tst.l    stopper2                Test for pause.
  181.     beq.s    scroll2
  182.     sub.l    #1,stopper2
  183.     rts
  184. scroll2:
  185.     cmp.l    #30,val2                Blitshifted all <<<
  186.     blo.s    coarse_scroll_it2        No then get doing it blitter man !!
  187.     bsr        blit_char2                Blit letter to screen
  188.     clr.l    val2                    Reset index
  189. coarse_scroll_it2:
  190.     bsr        coarse2                    Scroll all line
  191.     rts                            
  192.  
  193.     
  194. ; ** BLIT LETTER ON THE SCREEN **
  195.  
  196. blit_char
  197.     jsr        text
  198.     lea        custom,a5                Get custom chip address
  199.     move.l    screenx,a0                 The screen on which scrolly is.
  200.     move.l    #font,a1                 Put font in blitter source
  201.     add.l    d2,a1
  202.     MOVE.L    #2,D1
  203. blit_test:
  204.     btst    #14,$dff002                 Blitter busy !!!
  205.     bne    blit_test                     Lets wait till she finishes !
  206.     move.w    #$ffff,bltafwm(a5)        Mask 
  207.     move.w    #$ffff,bltalwm(a5)        Mask 
  208.     move.l    a0,bltdpth(a5)             Blitter dest D (BOTTOM OF SCREEN)
  209.     move.l    a1,bltapth(a5)             Blitter source A (SCROLLING FONT)
  210.     move.w    #36,bltamod(a5)             Modulo (20-1)*2
  211.     move.w    #36,bltdmod(a5)             Modulo (20-1)*2
  212.     move.w    #$9f0,bltcon0(a5)         Minterms D=A
  213.     clr.w    bltcon1(a5)                 Set Ascending mode
  214.      move.w    #32*64+2,bltsize(a5)     Blit size (SIZE OF FONT)
  215.     ADD.L    #10000,A0
  216.     ADD.L    #40*200,A1
  217.     DBF        D1,BLIT_TEST
  218.     rts                                  Return
  219.  
  220.  
  221. ; ** BLITSHIFT THE ENTIRE SCROLL LINE **
  222. ;
  223. ;     FUNCTION: TO BARREL SHIFT THE ENTIRE SCROLLING MESSAGE.
  224.  
  225. coarse:
  226.     lea        custom,a5                 
  227.     move.l    screenx,a0                
  228.     move.l    a0,a1
  229.     add.l    #2,a1
  230.     move.l    #2,d1
  231.     move    #12,d2                
  232.     incl    #4,val                    
  233.     ror        #4,d2                    ; Set to correct bits (12-15)
  234.     or.w    #$09f0,d2
  235. blit_wait:
  236.     btst    #14,$dff002            
  237.     bne        blit_wait
  238.     move.l    #-1,bltafwm(a5)
  239.     move.l    a1,bltapth(a5)
  240.     move.l    a0,bltdpth(a5)
  241.     move.w    #0,bltamod(a5)
  242.     move.w    #0,bltdmod(a5)
  243.     move.w    d2,bltcon0(a5)    
  244.     move.w    #32*64+20,bltsize(a5)
  245.     add.l    #10000,a0
  246.     add.l    #10000,a1
  247.     dbf        d1,blit_wait
  248.     rts    
  249.  
  250.  
  251.  
  252. ; ** SCROLL NUMBER TWO **
  253. ;
  254. ; DOCUMENTED IN SCROLL NUMBER ONE.
  255.  
  256. blit_char2:
  257.     jsr        text2
  258.     lea        custom,a5                
  259.     move.l    screeny,a0                 
  260.     move.l    #font,a1                 
  261.     add.l    d2,a1
  262.     MOVE.L    #2,D6
  263. blit_test2:
  264.     btst    #14,$dff002                 
  265.     bne    blit_test2                     
  266.     move.w    #$ffff,bltafwm(a5)        
  267.     move.w    #$ffff,bltalwm(a5)        
  268.     move.l    a0,bltdpth(a5)             
  269.     move.l    a1,bltapth(a5)             
  270.     move.w    #36,bltamod(a5)             
  271.     move.w    #36,bltdmod(a5)             
  272.     move.w    #$9f0,bltcon0(a5)         
  273.     clr.w    bltcon1(a5)                 
  274.      move.w    #32*64+2,bltsize(a5)     
  275.     ADD.L    #10000,A0
  276.     ADD.L    #40*200,A1
  277.     DBF        D6,BLIT_TEST2
  278.     rts                                  
  279.  
  280. coarse2:
  281.     lea        custom,a5                 
  282.     move.l    screeny,a0                
  283.     move.l    a0,a1
  284.     add.l    #2,a1
  285.     move.l    #2,d4
  286.     incl    #4,val2                    
  287.     move    #12,d7                
  288.     ror        #4,d7                    
  289.     or        #%100111110000,d7        
  290. blit_wait2:
  291.     btst    #14,$dff002            
  292.     bne        blit_wait2
  293.     move.l    #-1,bltafwm(a5)
  294.     move.l    a1,bltapth(a5)
  295.     move.l    a0,bltdpth(a5)
  296.     move.w    #0,bltamod(a5)
  297.     move.w    #0,bltdmod(a5)
  298.     move.w    d7,bltcon0(a5)    
  299.     move.w    #32*64+20,bltsize(a5)
  300.     add.l    #10000,a0
  301.     add.l    #10000,a1
  302.     dbf        d4,blit_wait2
  303.     rts
  304.     
  305.  
  306.  
  307.  
  308. ; ** THIS CRAPPY CODE BOUNCES THE SCROLLY MESSAGE NUMBER TWO **
  309. ;
  310. ;     ENTRYS  : YCORD-HOW FAR UP AND DOWN SCREEN TO GO.
  311. ;             : DELTAY-WAIT COMMAND IN COPPERLIST.
  312. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  313.  
  314. bounce:
  315.     cmp.l    #66,ycord
  316.     beq.s    up
  317.     add.l    #1,ycord
  318.     sub.b    #1,deltay
  319.     rts
  320. up: cmp.l    #66,ycordminus
  321.     beq.s    rst_cord
  322.     add.l    #1,ycordminus
  323.     add.b    #1,deltay
  324.     rts
  325. rst_cord:
  326.     clr.l    ycord
  327.     clr.l    ycordminus
  328.     rts
  329.     
  330.     even
  331.  
  332.  
  333. ; ** THIS CRAPPY CODE BOUNCES SCROLLY MESSAGE NUMBER ONE (ONE AT THE TOP) **
  334. ;
  335. ;     ENTRYS  : YCORD2-HOW FAR UP AND DOWN SCREEN TO GO.
  336. ;             : DELTAY2-WAIT COMMAND IN COPPERLIST.
  337. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  338.  
  339. bounce2:
  340.     cmp.l    #66,ycord2
  341.     beq.s    up2
  342.     add.l    #1,ycord2
  343.     add.b    #1,deltay2
  344.     rts
  345. up2:cmp.l    #66,ycordminus2
  346.     beq.s    rst_cord2
  347.     add.l    #1,ycordminus2
  348.     sub.b    #1,deltay2
  349.     rts
  350. rst_cord2:
  351.     clr.l    ycord2
  352.     clr.l    ycordminus2
  353.     rts
  354.     
  355.     even
  356.  
  357.  
  358. ; ** CHARACTER DECODER ROUTINE **
  359.  
  360. ;    CHARACTER BASE ADDRESS RETURNED IN D2
  361. ;     JUST ADD THIS TO YOUR FONT ADDREES.
  362.  
  363. text:
  364.     Clr.l    d1
  365.     move.l    acurent,a2
  366.     move.b    (A2),d1
  367.     cmp.b    #254,d1
  368.     beq.s    stop_scroll
  369.     Cmp.b    #255,d1
  370.     bne        over
  371.     Move.l    #Texter,a2
  372.     MOVE.L    #TEXTER,ACURENT
  373.     Move.b    (a2),d1
  374. Over
  375.     Add.l    #1,Acurent
  376.     Lea        Char,a1
  377.     Sub.l    #32,d1
  378.     Add.l    d1,d1
  379.     Clr.l    d2
  380.     Move.w    (a1,d1),d2                ; CHAR BASE ADDRESS IN D2.
  381.     Rts
  382. stop_scroll:
  383.     move.l    #5136,d2                ; Blank letter.
  384.     add.l    #1,acurent
  385.     move.l    #150,stopper
  386.     rts
  387.  
  388.  
  389. ; ** CHARACTER OFFSETS TO FONT **
  390.     even
  391. Char:
  392.     dc.w    5136,3864,0,0,0,0,0,5132,3868,3872,0,0
  393.     dc.w    5128,3876,5124,0,3860,2584,2588,2592,2596,3840
  394.     dc.w    3844,3848,3852,3856,0,0,0,0,0,5120,0
  395.     dc.w    0,4,8,12,16,20,24,28,32,36,1280,1284,1288,1292,1296
  396.     dc.w    1300,1304,1308,1312,1316,2560,2564,2568,2572,2576,2580
  397.     dc.w    0,0,0
  398.     even
  399.  
  400. ; ** MESSAGE NUMBER ONE **
  401. Acurent:
  402.     DC.L    Texter
  403. Texter:
  404.     DC.B    " CRYPTIC UK STRIKE BACK !!!        "
  405.     DC.B    "   TANGO   ",254
  406.     DC.B    "  YES WELL I'M OFF FOR NOW TO SEE IF THIS ROUTINE WORKS.     "
  407.     DC.B    255
  408.     even
  409.  
  410.  
  411. text2:
  412.     Clr.l    d1
  413.     move.l    acurent2,a2
  414.     move.b    (A2),d1
  415.     cmp.b    #254,d1
  416.     beq        pause_scroll
  417.     Cmp.b    #255,d1
  418.     bne        over2
  419.     Move.l    #Texter2,a2
  420.     MOVE.L    #TEXTER2,ACURENT2        ; RESET TO BEGINING OF MESSAGE.
  421.     Move.b    (a2),d1
  422. Over2:
  423.     Add.l    #1,Acurent2
  424.     Lea        Char,a1
  425.     Sub.l    #32,d1
  426.     Add.l    d1,d1
  427.     Clr.l    d2
  428.     Move.w    (a1,d1),d2                ; CHAR BASE ADDRESS IN D2.
  429.     rts
  430. pause_scroll:
  431.     move.l    #5136,d2
  432.     add.l    #1,acurent2
  433.     move.l    #150,stopper2
  434.     rts
  435.  
  436.  
  437. ; ** MESSAGE NUMBER TWO **
  438.     even
  439. Acurent2
  440.     Dc.l    Texter2
  441. Texter2:
  442.     Dc.b    "WOW !!!  THIZ IS SCROLLER NUMBER 2 ",254," AND ITS COOOOOL... ",255
  443.     even
  444.  
  445.  
  446. ;                **********************************************
  447. ;                ** THE MUZAX PLAY ROUTINE FOR NOISE TRACKER ** 
  448. ;                  ******************************************
  449.  
  450.  
  451. MUZAX:
  452.  
  453.     jsr    CYB_init
  454.  
  455. end:    rts
  456. CYB_init:lea    CYB_data,a0
  457.     add.l    #$03b8,a0
  458.     moveq    #$7f,d0
  459.     moveq    #0,d1
  460. CYB_init1:
  461.     move.l    d1,d2
  462.     subq.w    #1,d0
  463. CYB_init2:
  464.     move.b    (a0)+,d1
  465.     cmp.b    d2,d1
  466.     bgt.s    CYB_init1
  467.     dbf    d0,CYB_init2
  468.     addq.b    #1,d2
  469. CYB_init3:
  470.     lea    CYB_data,a0
  471.     lea    CYB_sample1(pc),a1
  472.     asl.l    #8,d2
  473.     asl.l    #2,d2
  474.     add.l    #$438,d2
  475.     add.l    a0,d2
  476.     moveq    #$1e,d0
  477. CYB_init4:
  478.     move.l    d2,(a1)+
  479.     moveq    #0,d1
  480.     move.w    42(a0),d1
  481.     asl.l    #1,d1
  482.     add.l    d1,d2
  483.     add.l    #$1e,a0
  484.     dbf    d0,CYB_init4
  485.     lea    CYB_sample1(PC),a0
  486.     moveq    #0,d0
  487. CYB_clear:
  488.     move.l    (a0,d0.w),a1
  489.     clr.l    (a1)
  490.     addq.w    #4,d0
  491.     cmp.w    #$7c,d0
  492.     bne.s    CYB_clear
  493.     clr.w    $dff0a8
  494.     clr.w    $dff0b8
  495.     clr.w    $dff0c8
  496.     clr.w    $dff0d8
  497.     clr.l    CYB_partnrplay
  498.     clr.l    CYB_partnote
  499.     clr.l    CYB_partpoint
  500.     move.b    CYB_data+$3b6,CYB_maxpart+1
  501.     rts
  502.     rts
  503. CYB_music:
  504.     addq.w    #1,CYB_counter
  505. CYB_cool:cmp.w    #6,CYB_counter
  506.     bne.s    CYB_notsix
  507.     clr.w    CYB_counter
  508.     bra    CYB_rout2
  509. CYB_notsix:
  510.     lea    CYB_aud1temp(PC),a6
  511.     tst.b    3(a6)
  512.     beq.s    CYB_arp1
  513.     lea    $dff0a0,a5        
  514.     bsr.s    CYB_arprout
  515. CYB_arp1:lea    CYB_aud2temp(PC),a6
  516.     tst.b    3(a6)
  517.     beq.s    CYB_arp2
  518.     lea    $dff0b0,a5
  519.     bsr.s    CYB_arprout
  520. CYB_arp2:lea    CYB_aud3temp(PC),a6
  521.     tst.b    3(a6)
  522.     beq.s    CYB_arp3
  523.     lea    $dff0c0,a5
  524.     bsr.s    CYB_arprout
  525. CYB_arp3:lea    CYB_aud4temp(PC),a6
  526.     tst.b    3(a6)
  527.     beq.s    CYB_arp4
  528.     lea    $dff0d0,a5
  529.     bra.s    CYB_arprout
  530. CYB_arp4:    rts
  531. CYB_arprout:
  532.     move.b    2(a6),d0
  533.     and.b    #$0f,d0
  534.     tst.b    d0
  535.     beq    CYB_arpegrt
  536.     cmp.b    #$01,d0
  537.     beq.s    CYB_portup
  538.     cmp.b    #$02,d0
  539.     beq.s    CYB_portdwn
  540.     cmp.b    #$0a,d0
  541.     beq.s    CYB_volslide
  542.     rts
  543. CYB_portup:
  544.     moveq    #0,d0
  545.     move.b    3(a6),d0
  546.     sub.w    d0,22(a6)
  547.     cmp.w    #$71,22(a6)
  548.     bpl.s    CYB_ok1
  549.     move.w    #$71,22(a6)
  550. CYB_ok1:    move.w    22(a6),6(a5)
  551.     rts
  552. CYB_portdwn:
  553.     moveq    #0,d0
  554.     move.b    3(a6),d0
  555.     add.w    d0,22(a6)
  556.     cmp.w    #$538,22(a6)
  557.     bmi.s    CYB_ok2
  558.     move.w    #$538,22(a6)
  559. CYB_ok2:    move.w    22(a6),6(a5)
  560.     rts
  561. CYB_volslide:
  562.     moveq    #0,d0
  563.     move.b    3(a6),d0
  564.     lsr.b    #4,d0
  565.     tst.b    d0
  566.     beq.s    CYB_voldwn
  567.     add.w    d0,18(a6)
  568.     cmp.w    #64,18(a6)
  569.     bmi.s    CYB_ok3
  570.     move.w    #64,18(a6)
  571. CYB_ok3:    move.w    18(a6),8(a5)
  572.     rts
  573. CYB_voldwn:
  574.     moveq    #0,d0
  575.     move.b    3(a6),d0
  576.     and.b    #$0f,d0
  577.     sub.w    d0,18(a6)
  578.     bpl.s    CYB_ok4
  579.     clr.w    18(a6)
  580. CYB_ok4:    move.w    18(a6),8(a5)
  581.     rts
  582. CYB_arpegrt:
  583.     move.w    CYB_counter(PC),d0
  584.     cmp.w    #1,d0
  585.     beq.s    CYB_loop2
  586.     cmp.w    #2,d0
  587.     beq.s    CYB_loop3
  588.     cmp.w    #3,d0
  589.     beq.s    CYB_loop4
  590.     cmp.w    #4,d0
  591.     beq.s    CYB_loop2
  592.     cmp.w    #5,d0
  593.     beq.s    CYB_loop3
  594.     rts
  595. CYB_loop2:
  596.     moveq    #0,d0
  597.     move.b    3(a6),d0
  598.     lsr.b    #4,d0
  599.     bra.s    CYB_cont
  600. CYB_loop3:
  601.     moveq    #$00,d0
  602.     move.b    3(a6),d0
  603.     and.b    #$0f,d0
  604.     bra.s    CYB_cont
  605. CYB_loop4:
  606.     move.w    16(a6),d2
  607.     bra.s    CYB_endpart
  608. CYB_cont:
  609.     add.w    d0,d0
  610.     moveq    #0,d1
  611.     move.w    16(a6),d1
  612.     and.w    #$fff,d1
  613.     lea    CYB_arpeggio(PC),a0
  614. CYB_loop5:
  615.     move.w    (a0,d0),d2
  616.     cmp.w    (a0),d1
  617.     beq.s    CYB_endpart
  618.     addq.l    #2,a0
  619.     bra.s    CYB_loop5
  620. CYB_endpart:
  621.     move.w    d2,6(a5)
  622.     rts
  623. CYB_rout2:
  624.     lea    CYB_data,a0
  625.     move.l    a0,a3
  626.     add.l    #$0c,a3
  627.     move.l    a0,a2
  628.     add.l    #$3b8,a2
  629.     add.l    #$43c,a0
  630.     move.l    CYB_partnrplay(PC),d0
  631.     moveq    #0,d1
  632.     move.b    (a2,d0),d1
  633.     asl.l    #8,d1
  634.     asl.l    #2,d1
  635.     add.l    CYB_partnote(PC),d1
  636.     move.l    d1,CYB_partpoint
  637.     clr.w    CYB_dmacon
  638.     lea    $dff0a0,a5
  639.     lea    CYB_aud1temp(PC),a6
  640.     bsr    CYB_playit
  641.     lea    $dff0b0,a5
  642.     lea    CYB_aud2temp(PC),a6
  643.     bsr    CYB_playit
  644.     lea    $dff0c0,a5
  645.     lea    CYB_aud3temp(PC),a6
  646.     bsr    CYB_playit
  647.     lea    $dff0d0,a5
  648.     lea    CYB_aud4temp(PC),a6
  649.     bsr    CYB_playit
  650.     move.w    #$01f4,d0
  651. CYB_rls:    dbf    d0,CYB_rls
  652.     move.w    #$8000,d0
  653.     or.w    CYB_dmacon,d0
  654.     move.w    d0,$dff096
  655.     lea    CYB_aud4temp(PC),a6
  656.     cmp.w    #1,14(a6)
  657.     bne.s    CYB_voice3
  658.     move.l    10(a6),$dff0d0
  659.     move.w    #1,$dff0d4
  660. CYB_voice3:
  661.     
  662.     lea    CYB_aud3temp(PC),a6
  663.     cmp.w    #1,14(a6)
  664.     bne.s    CYB_voice2
  665.     move.w    #1,$dff0c4
  666. CYB_voice2:
  667.     
  668.     lea    CYB_aud2temp(PC),a6
  669.     cmp.w    #1,14(a6)
  670.     bne.s    CYB_voice1
  671.     move.l    10(a6),$dff0b0
  672.     move.w    #1,$dff0b4
  673. CYB_voice1:
  674.     lea    CYB_aud1temp(PC),a6
  675.     cmp.w    #1,14(a6)
  676.     bne.s    CYB_voice0
  677.     move.l    10(a6),$dff0a0
  678.     move.w    #1,$dff0a4
  679. CYB_voice0:
  680.     move.l    CYB_partnote(PC),d0
  681.     add.l    #$10,d0
  682.     move.l    d0,CYB_partnote
  683.     cmp.l    #$400,d0
  684.     bne.s    CYB_stop
  685. CYB_higher:
  686.     clr.l    CYB_partnote
  687.     addq.l    #1,CYB_partnrplay
  688.     moveq    #0,d0
  689.     move.w    CYB_maxpart(PC),d0
  690.     move.l    CYB_partnrplay(PC),d1
  691.     cmp.l    d0,d1
  692.     bne.s    CYB_stop
  693.     clr.l    CYB_partnrplay
  694.     ;st    Pflag
  695. CYB_stop:tst.w    CYB_status
  696.     beq.s    CYB_stop2
  697.     clr.w    CYB_status
  698.     bra.s    CYB_higher
  699. CYB_stop2:
  700.     rts
  701. CYB_playit:
  702.     
  703.     move.l    (a0,d1.l),(a6)
  704.     addq.l    #4,d1
  705.     moveq    #0,d2
  706.     move.b    2(a6),d2
  707.     and.b    #$f0,d2
  708.     lsr.b    #4,d2
  709.     move.b    (a6),d0
  710.     and.b    #$f0,d0
  711.     or.b    d0,d2
  712.     tst.b    d2
  713.     beq.s    CYB_nosamplechange
  714.     moveq    #0,d3
  715.     lea    CYB_samples(PC),a1
  716.     move.l    d2,d4
  717.     asl.l    #2,d2
  718.     mulu    #$1e,d4
  719.     move.l    (a1,d2),4(a6)
  720.     move.w    (a3,d4.l),8(a6)
  721.     move.w    2(a3,d4.l),18(a6)
  722.     move.w    4(a3,d4.l),d3
  723.     tst.w    d3
  724.     beq.s    CYB_displace
  725.     move.l    4(a6),d2
  726.     add.l    d3,d2
  727.     move.l    d2,4(a6)
  728.     move.l    d2,10(a6)
  729.     move.w    6(a3,d4.l),8(a6)
  730.     move.w    6(a3,d4.l),14(a6)
  731.     move.w    18(a6),8(a5)
  732.     bra.s    CYB_nosamplechange
  733. CYB_displace:
  734.     move.l    4(a6),d2
  735.     add.l    d3,d2
  736.     move.l    d2,10(a6)
  737.     move.w    6(a3,d4.l),14(a6)
  738.     move.w    18(a6),8(a5)
  739. CYB_nosamplechange:
  740.     move.w    (a6),d0
  741.     and.w    #$fff,d0
  742.     tst.w    d0
  743.     beq.s    CYB_retrout
  744.     move.w    (a6),16(a6)
  745.     move.w    20(a6),$dff096
  746.     move.l    4(a6),(a5)
  747.     move.w    8(a6),4(a5)
  748.     move.w    (a6),d0
  749.     and.w    #$fff,d0
  750.     move.w    d0,6(a5)
  751.     move.w    20(a6),d0
  752.     or.w    d0,CYB_dmacon
  753. CYB_retrout:
  754.     tst.w    (a6)
  755.     beq.s    CYB_nonewper
  756.     move.w    (a6),22(a6)
  757. CYB_nonewper:
  758.     move.b    2(a6),d0
  759.     and.b    #$0f,d0
  760.     cmp.b    #$0b,d0
  761.     beq.s    CYB_posjmp
  762.     cmp.b    #$0c,d0
  763.     beq.s    CYB_setvol
  764.     cmp.b    #$0d,d0
  765.     beq.s    CYB_break
  766.     cmp.b    #$0e,d0
  767.     beq.s    CYB_setfil
  768.     cmp.b    #$0f,d0
  769.     beq.s    CYB_setspeed
  770.     rts
  771. CYB_posjmp:
  772.     not.w    CYB_status
  773.     moveq    #0,d0
  774.     move.b    3(a6),d0
  775.     subq.b    #1,d0
  776.     move.l    d0,CYB_partnrplay
  777.     rts
  778. CYB_setvol:
  779.     move.b    3(a6),8(a5)
  780.     rts
  781. CYB_break:
  782.     not.w    CYB_status
  783.     rts
  784. CYB_setfil:
  785.     moveq    #0,d0
  786.     move.b    3(a6),d0
  787.     and.b    #1,d0
  788.     rol.b    #1,d0
  789.     and.b    #$fd,$bfe001
  790.     or.b    d0,$bfe001
  791.     rts
  792. CYB_setspeed:
  793.     move.b    3(a6),d0
  794.     and.b    #$0f,d0
  795.     beq.s    CYB_back
  796.     clr.w    CYB_counter
  797.     move.b    d0,CYB_cool+3
  798. CYB_back:    rts
  799. CYB_aud1temp:
  800.     dcb.w    10,0
  801.     dc.w    1
  802.     dcb.w    2,0
  803. CYB_aud2temp:
  804.     dcb.w    10,0
  805.     dc.w    2
  806.     dcb.w    2,0
  807. CYB_aud3temp:
  808.     dcb.w    10,0
  809.     dc.w    4
  810.     dcb.w    2,0
  811. CYB_aud4temp:
  812.     dcb.w    10,0
  813.     dc.w    8
  814.     dcb.w    2,0
  815. CYB_partnote:    dc.l    0
  816. CYB_partnrplay:    dc.l    0
  817. CYB_counter:    dc.w    0
  818. CYB_partpoint:    dc.l    0
  819. CYB_samples:    dc.l    0
  820. CYB_sample1:    dcb.l    31,0
  821. CYB_maxpart:    dc.w    0
  822. CYB_dmacon:    dc.w    0
  823. CYB_status:    dc.w    0
  824. CYB_arpeggio:
  825.     dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  826.     dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  827.     dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  828.     dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  829.     dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  830.  
  831.  
  832.             
  833.  
  834. ; ** THE COPPERLIST **
  835. OURCOPPER:
  836. Blank1L    dc.w    bpl1ptl,$0000
  837. Blank1H    dc.w    bpl1pth,$0000
  838. Blank2L    dc.w    bpl3ptl,$0000
  839. Blank2H    dc.w    bpl3pth,$0000
  840. Blank3L    dc.w    bpl5ptl,$0000
  841. Blank3H    dc.w    bpl5pth,$0000
  842.         dc.w    $120,0
  843.         dc.w    $122,0
  844.         dc.w    bpl1mod,-2,bpl2mod,-2
  845.         dc.w    diwstrt,$2c81+16,diwstop,$2cc1-16
  846.         dc.w    bplcon0,$6600,bplcon1,$0000
  847.         dc.w    ddfstrt,$30,ddfstop,$d0
  848.         dc.w    color01,$000
  849.         dc.w    color08,$000,color09,$f00,color10,$0f0,color11,$fff
  850.         dc.w    color12,$eaf,color13,$145,color14,$a00,color15,$eee
  851. bp2lo:    dc.w    bpl2ptl,$0000
  852. bp2hi:    dc.w    bpl2pth,$0000
  853. bp4lo:    dc.w    bpl4ptl,$0000
  854. bp4hi:    dc.w    bpl4pth,$0000
  855. bp6lo:    dc.w    bpl6ptl,$0000
  856. bp6hi:    dc.w    bpl6pth,$0000
  857. deltay2:wait    $3909,$fffe
  858.         dc.w    color01,$eee
  859. bp1lo:    dc.w    bpl1ptl,$0000
  860. bp1hi:    dc.w    bpl1pth,$0000
  861. bp3lo:    dc.w    bpl3ptl,$0000
  862. bp3hi:    dc.w    bpl3pth,$0000
  863. bp5lo:    dc.w    bpl5ptl,$0000
  864. bp5hi:    dc.w    bpl5pth,$0000
  865. deltay:    wait    $da09,$fffe
  866. abp1lo:    dc.w    bpl1ptl,$0000
  867. abp1hi:    dc.w    bpl1pth,$0000
  868. abp3lo:    dc.w    bpl3ptl,$0000
  869. abp3hi:    dc.w    bpl3pth,$0000
  870. abp5lo:    dc.w    bpl5ptl,$0000
  871. abp5hi:    dc.w    bpl5pth,$0000
  872.          DC.W    color01,$eee,color02,$dde
  873.         DC.W    color03,$bbd
  874.         DC.W    color04,$aac
  875.         DC.W    color05,$88c
  876.         DC.W    color06,$77b
  877.         DC.W    color07,$65a
  878.         end_copper
  879.         
  880.  
  881. ;LOCAL CONSTANTS
  882.  
  883. WBCOPPER:        DC.L    0
  884. GFXLIB:            DC.B     "graphics.library",0
  885. GFXBASE:        DC.L    0
  886. systemints:        dc.l    0
  887. scroll_offset:    dc.l    0
  888. screenx:        dc.l    picture
  889. screeny:        dc.l    picture2
  890. letter:            dc.b    0
  891. letter2:        dc.b    0
  892. val:            dc.l    0
  893. val2:            dc.l    0
  894. stopper:        dc.l    0
  895. stopper2:        dc.l    0
  896. speed:            dc.w    12
  897. ycord:        dc.l    0
  898. ycordminus:    dc.l    0
  899. ycord2:        dc.l    0
  900. ycordminus2:dc.l    0
  901. Blank        Dcb.b    4000,0
  902.  
  903. ;BINARY FILES TO BE INCLUDED
  904.     EVEN
  905. FONTSPACE:
  906. font:    
  907.     incbin    df0:METALCHARS
  908. picture2    
  909.     dcb.b    10000*3,0
  910. picture:
  911.     dcb.b    10000*3,0
  912. PLAY2:
  913.     INCBIN    DF1:PIC.IFF
  914. cyb_data:
  915.     incbin    df1:mod.count 
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.     
  924.     
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.     
  933.  
  934.